#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
#include "admin.h"

// 打印主菜单函数
void printf_function_menu()
{
    printf("             学生管理系统           \n");
    printf("----------------------------------------\n");
    printf("| 1、录入学生信息\t\t       |\n");
    printf("| 2、删除学生信息\t\t       |\n");
    printf("| 3、修改学生信息\t\t       |\n");
    printf("| 4、查看学生信息\t\t       |\n");
    printf("| 5、查看所有学生信息\t\t       |\n");
    printf("| 6、查看所有管理员信息\t\t       |\n");
    printf("| 7、退出登录\t\t\t       |\n");
    printf("| 0、退出系统\t\t\t       |\n");
    printf("----------------------------------------\n");
    printf("请输入相应的序号选择:");
}

// 执行菜单
int menuOperate(int menu, int login_flag, Student_p stu, int *student_index, Admin_p admin, int *admin_index)
{
    while (getchar() != '\n')
        ;
    system("cls"); // 清空控制台内容
    switch (menu)
    {
    case ADD_STUDENT:
        add_student(stu, student_index);
        return_Main();
        break;
    case DELETE_STUDENT:
        delete_student();
        return_Main();
        break;
    case UPDATE_STUDENT:
        updata_student(stu, student_index);
        break;
    case VIEW_STUDENT:
        show_one(stu, student_index);
        break;
    case VIEW_ALL_STUDENTS:
        show_all(stu, student_index);
        return_Main();
        break;
    case VIEW_ALL_ADMINS:
        show_all_admin(admin, admin_index);
        return_Main();
        break;
    case LOGOUT:
        return 0;
        break;
    case EXIT_SYSTEM:
        printf("退出成功!");
        exit(0);
    default:
        break;
    }
    return 1;
}

// 返回主菜单
void return_Main()
{
    while (1)
    {
        char c;
        printf("----------------------------------------\n");
        printf("输入 0 返回主菜单:");
        scanf(" %c", &c);
        if (c == '0')
        {
            system("cls"); // 清空控制台内容
            break;
        }
    }
}

// 退出功能页面
int return_function()
{
    while (1)
    {
        char c;
        printf("是否返回主页面?(Y/N)");
        scanf(" %c", &c);
        if (c == 'Y' || c == 'y')
        {
            system("cls"); // 清空控制台内容
            return 1;
        }
        else if (c == 'N' || c == 'n')
        {
            return -1;
        }
    }
}

// 录入学生信息
void add_student(Student_p stu, int *student_index)
{
    printf("             录入学生信息                 \n");
    printf("----------------------------------------\n");
    printf("开始录入学生信息:\n请输入姓名、年龄和成绩:\n");
    scanf("%s %d %d", stu[*student_index].name, &stu[*student_index].age, &stu[*student_index].score);
    printf("录入成功!录入信息:\n");
    printf("姓名: %s 年龄: %d 成绩: %d\n", stu[*student_index].name, stu[*student_index].age, stu[*student_index].score);
    (*student_index)++;
}

// 删除学生信息
void delete_student()
{
    printf("             删除学生信息                 \n");
    printf("----------------------------------------\n");
    printf("你删个蛋!\n");
}

// 修改学生信息
void updata_student(Student_p stu, int *student_index)
{
    printf("             修改学生信息                 \n");
    printf("----------------------------------------\n");
    int index = 0;
    printf("请输入想要修改的学生姓名:");
    while (1)
    {
        if ((index = find_student(stu, student_index)) == -1) // 没找到对应学生
        {
            if (return_function() == 1)
            {
                return;
            }
            printf("请重新输入想要修改的学生姓名:");
        }
        else
        {
            printf("需要修改的学生姓名: %s 年龄: %d 成绩: %d\n", stu[index].name, stu[index].age, stu[index].score);
            printf("请输入要修改的姓名、年龄和成绩:\n");
            int ret = scanf("%s %d %d", stu[index].name, &stu[index].age, &stu[index].score);
            if (ret != 3)
            {
                printf("修改失败!");
                return_Main();
                break;
            }
            else
            {
                printf("修改成功!\n");
                return_Main();
                break;
            }
        }
    }
}

// 查看学生信息
void show_one(Student_p stu, int *student_index)
{
    printf("             查看学生信息                 \n");
    printf("----------------------------------------\n");
    int index = 0;
    printf("请输入想要查看的学生姓名:");
    while (1)
    {
        if ((index = find_student(stu, student_index)) == -1) // 没找到对应学生
        {
            if (return_function() == 1)
            {
                return;
            }
            printf("请重新输入想要查看的学生姓名:\n");
        }
        else
        {
            printf("该学生姓名: %s 年龄: %d 成绩: %d\n", stu[index].name, stu[index].age, stu[index].score);
            return_Main(); // 返回主菜单
            return;
        }
    }
}

// 查看所有学生信息
void show_all(Student_p stu, int *student_index)
{
    printf("           查看所有学生信息                 \n");
    printf("----------------------------------------\n");
    printf("共有%d 个学生信息。所有学生的信息如下：\n", *student_index);
    printf("姓名\t年龄\t成绩\n");
    for (int i = 0; i < *student_index; i++)
    {
        printf("%s\t%d\t%d\n", stu[i].name, stu[i].age, stu[i].score);
    }
}

// 查找学生索引
int find_student(Student_p stu, int *student_index)
{
    int temp = 0;
    char name[32];
    int i = 0;
    scanf(" %s", name);
    // 查找对应学生信息
    for (i = 0; i < *student_index; i++)
    {
        if (strcmp(stu[i].name, name) == 0)
        {
            temp = 1;
            return i;
        }
    }
    if (temp != 1)
    {
        printf("没找到对应学生!\n");
        return -1;
    }
}

// 查看所有管理员账号
void show_all_admin(Admin_p admin, int *admin_index)
{
    printf("           查看所有管理员信息                  \n");
    printf("----------------------------------------\n");
    printf("共有%d个管理员账号。所有管理员账号如下:\n", *admin_index);
    for (int i = 0; i < *admin_index; i++)
    {
        printf("%s\n", admin[i].username);
    }
}